gtk: Fix parsing of accelerators with keycodes
authorBastien Nocera <hadess@hadess.net>
Thu, 10 Nov 2011 10:59:44 +0000 (10:59 +0000)
committerBastien Nocera <hadess@hadess.net>
Thu, 10 Nov 2011 14:33:28 +0000 (14:33 +0000)
GDK_KEY_VoidSymbol is not the same as keycode 0. This fixes
keycodes such as "0xb3" being parsed as "VoidSymbol" keysyms.

https://bugzilla.gnome.org/show_bug.cgi?id=663761

gtk/gtkaccelgroup.c
gtk/tests/accel.c

index cb31d029bd723ce2e9d84c9ce82c2b6d45b8cc72..6d30880cdae75c825222080fb35f4557494db054 100644 (file)
@@ -1323,8 +1323,6 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                gchar *endptr;
                gint tmp_keycode;
 
-               keyval = GDK_KEY_VoidSymbol;
-
                memcpy (keystring, accelerator, 4);
                keystring [4] = '\000';
 
@@ -1367,7 +1365,7 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                }
            }
 
-          if (keyval != GDK_KEY_VoidSymbol && accelerator_codes != NULL)
+          if (keyval && accelerator_codes != NULL)
             {
               GdkKeymapKey *keys;
               gint n_keys, i, j;
index 43e14258ec92965280baccea65baf1ecd7d24ab8..072641368735263d26e5c1b0b974dd9d0dce2a13 100644 (file)
 
 static void
 test_one_accel (const char *accel,
-               const char *exp_label)
+               const char *exp_label,
+               gboolean has_keysym)
 {
   guint accel_key;
   GdkModifierType mods;
   guint *keycodes;
   char *label, *name;
 
+  accel_key = 0;
   gtk_accelerator_parse_with_keycode (accel,
                                      &accel_key,
                                      &keycodes,
                                      &mods);
 
-  g_assert (accel_key != 0);
+  if (has_keysym)
+    g_assert (accel_key != 0);
   g_assert (keycodes);
   g_assert (keycodes[0] != 0);
 
@@ -58,7 +61,8 @@ test_one_accel (const char *accel,
 static void
 accel (void)
 {
-  test_one_accel ("<Primary><Alt>z", "Ctrl+Alt+Z");
+  test_one_accel ("0xb3", "0xb3", FALSE);
+  test_one_accel ("<Primary><Alt>z", "Ctrl+Alt+Z", TRUE);
 }
 
 int